<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.5"/>
<title>Theron: Theron::Framework Class Reference</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/javascript">
  $(document).ready(function() { searchBox.OnSelectItem(0); });
</script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <td style="padding-left: 0.5em;">
   <div id="projectname">Theron
   &#160;<span id="projectnumber">6.00.02</span>
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.5 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
  <div id="navrow1" class="tabs">
    <ul class="tablist">
      <li><a href="index.html"><span>Main&#160;Page</span></a></li>
      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
      <li class="current"><a href="annotated.html"><span>Classes</span></a></li>
      <li><a href="files.html"><span>Files</span></a></li>
      <li>
        <div id="MSearchBox" class="MSearchBoxInactive">
        <span class="left">
          <img id="MSearchSelect" src="search/mag_sel.png"
               onmouseover="return searchBox.OnSearchSelectShow()"
               onmouseout="return searchBox.OnSearchSelectHide()"
               alt=""/>
          <input type="text" id="MSearchField" value="Search" accesskey="S"
               onfocus="searchBox.OnSearchFieldFocus(true)" 
               onblur="searchBox.OnSearchFieldFocus(false)" 
               onkeyup="searchBox.OnSearchFieldChange(event)"/>
          </span><span class="right">
            <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a>
          </span>
        </div>
      </li>
    </ul>
  </div>
  <div id="navrow2" class="tabs2">
    <ul class="tablist">
      <li><a href="annotated.html"><span>Class&#160;List</span></a></li>
      <li><a href="hierarchy.html"><span>Class&#160;Hierarchy</span></a></li>
      <li><a href="functions.html"><span>Class&#160;Members</span></a></li>
    </ul>
  </div>
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
<a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark">&#160;</span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark">&#160;</span>Classes</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark">&#160;</span>Namespaces</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark">&#160;</span>Files</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark">&#160;</span>Functions</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark">&#160;</span>Variables</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark">&#160;</span>Typedefs</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark">&#160;</span>Enumerations</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark">&#160;</span>Enumerator</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark">&#160;</span>Macros</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(10)"><span class="SelectionMark">&#160;</span>Pages</a></div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div id="nav-path" class="navpath">
  <ul>
<li class="navelem"><a class="el" href="namespaceTheron.html">Theron</a></li><li class="navelem"><a class="el" href="classTheron_1_1Framework.html">Framework</a></li>  </ul>
</div>
</div><!-- top -->
<div class="header">
  <div class="summary">
<a href="#nested-classes">Classes</a> &#124;
<a href="#pub-methods">Public Member Functions</a> &#124;
<a href="classTheron_1_1Framework-members.html">List of all members</a>  </div>
  <div class="headertitle">
<div class="title">Theron::Framework Class Reference</div>  </div>
</div><!--header-->
<div class="contents">

<p>Manager class that hosts, manages, and executes actors.  
 <a href="classTheron_1_1Framework.html#details">More...</a></p>

<p><code>#include &lt;Framework.h&gt;</code></p>
<div id="dynsection-0" onclick="return toggleVisibility(this)" class="dynheader closed" style="cursor:pointer;">
  <img id="dynsection-0-trigger" src="closed.png" alt="+"/> Inheritance diagram for Theron::Framework:</div>
<div id="dynsection-0-summary" class="dynsummary" style="display:block;">
</div>
<div id="dynsection-0-content" class="dyncontent" style="display:none;">
 <div class="center">
  <img src="classTheron_1_1Framework.png" usemap="#Theron::Framework_map" alt=""/>
  <map id="Theron::Framework_map" name="Theron::Framework_map">
</map>
 </div></div>
<table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="nested-classes"></a>
Classes</h2></td></tr>
<tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct &#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="structTheron_1_1Framework_1_1Parameters.html">Parameters</a></td></tr>
<tr class="memdesc:"><td class="mdescLeft">&#160;</td><td class="mdescRight"><a class="el" href="structTheron_1_1Framework_1_1Parameters.html" title="Parameters structure that can be passed to the Framework constructor. ">Parameters</a> structure that can be passed to the <a class="el" href="classTheron_1_1Framework.html" title="Manager class that hosts, manages, and executes actors. ">Framework</a> constructor.  <a href="structTheron_1_1Framework_1_1Parameters.html#details">More...</a><br/></td></tr>
<tr class="separator:"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table><table class="memberdecls">
<tr class="heading"><td colspan="2"><h2 class="groupheader"><a name="pub-methods"></a>
Public Member Functions</h2></td></tr>
<tr class="memitem:aa1571bd9eb157559b2c8ad1af0c4af8b"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTheron_1_1Framework_aa1571bd9eb157559b2c8ad1af0c4af8b.html#aa1571bd9eb157559b2c8ad1af0c4af8b">Framework</a> (const <a class="el" href="namespaceTheron_a254da7d1d07833b997828500fbf73daa.html#a254da7d1d07833b997828500fbf73daa">uint32_t</a> threadCount)</td></tr>
<tr class="memdesc:aa1571bd9eb157559b2c8ad1af0c4af8b"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor.  <a href="#aa1571bd9eb157559b2c8ad1af0c4af8b">More...</a><br/></td></tr>
<tr class="separator:aa1571bd9eb157559b2c8ad1af0c4af8b"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:abf26f36009362e0e318a0795853ae71c"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTheron_1_1Framework_abf26f36009362e0e318a0795853ae71c.html#abf26f36009362e0e318a0795853ae71c">Framework</a> (const <a class="el" href="structTheron_1_1Framework_1_1Parameters.html">Parameters</a> &amp;params=<a class="el" href="structTheron_1_1Framework_1_1Parameters.html">Parameters</a>())</td></tr>
<tr class="memdesc:abf26f36009362e0e318a0795853ae71c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor.  <a href="#abf26f36009362e0e318a0795853ae71c">More...</a><br/></td></tr>
<tr class="separator:abf26f36009362e0e318a0795853ae71c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1fb992ee6af7c2de1afdae92dbd1d267"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTheron_1_1Framework_a1fb992ee6af7c2de1afdae92dbd1d267.html#a1fb992ee6af7c2de1afdae92dbd1d267">Framework</a> (<a class="el" href="classTheron_1_1EndPoint.html">EndPoint</a> &amp;endPoint, const char *const name=0, const <a class="el" href="structTheron_1_1Framework_1_1Parameters.html">Parameters</a> &amp;params=<a class="el" href="structTheron_1_1Framework_1_1Parameters.html">Parameters</a>())</td></tr>
<tr class="memdesc:a1fb992ee6af7c2de1afdae92dbd1d267"><td class="mdescLeft">&#160;</td><td class="mdescRight">Constructor.  <a href="#a1fb992ee6af7c2de1afdae92dbd1d267">More...</a><br/></td></tr>
<tr class="separator:a1fb992ee6af7c2de1afdae92dbd1d267"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a18caa73848bb4d46b214f5d46a5786ba"><td class="memItemLeft" align="right" valign="top">&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTheron_1_1Framework_a18caa73848bb4d46b214f5d46a5786ba.html#a18caa73848bb4d46b214f5d46a5786ba">~Framework</a> ()</td></tr>
<tr class="memdesc:a18caa73848bb4d46b214f5d46a5786ba"><td class="mdescLeft">&#160;</td><td class="mdescRight">Destructor.  <a href="#a18caa73848bb4d46b214f5d46a5786ba">More...</a><br/></td></tr>
<tr class="separator:a18caa73848bb4d46b214f5d46a5786ba"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a2d5f7f6508227d578dfcedf40dc0b9d0"><td class="memTemplParams" colspan="2">template&lt;typename ValueType &gt; </td></tr>
<tr class="memitem:a2d5f7f6508227d578dfcedf40dc0b9d0"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classTheron_1_1Framework_a2d5f7f6508227d578dfcedf40dc0b9d0.html#a2d5f7f6508227d578dfcedf40dc0b9d0">Send</a> (const ValueType &amp;value, const <a class="el" href="classTheron_1_1Address.html">Address</a> &amp;from, const <a class="el" href="classTheron_1_1Address.html">Address</a> &amp;address)</td></tr>
<tr class="memdesc:a2d5f7f6508227d578dfcedf40dc0b9d0"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sends a message to the entity (typically an actor, but potentially a <a class="el" href="classTheron_1_1Receiver.html" title="A standalone entity that can accept messages sent by actors. ">Receiver</a>) at the given address.  <a href="#a2d5f7f6508227d578dfcedf40dc0b9d0">More...</a><br/></td></tr>
<tr class="separator:a2d5f7f6508227d578dfcedf40dc0b9d0"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:af3932db00a7bcf189bec9798980e8252"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTheron_1_1Framework_af3932db00a7bcf189bec9798980e8252.html#af3932db00a7bcf189bec9798980e8252">SetMaxThreads</a> (const <a class="el" href="namespaceTheron_a254da7d1d07833b997828500fbf73daa.html#a254da7d1d07833b997828500fbf73daa">uint32_t</a> count)</td></tr>
<tr class="memdesc:af3932db00a7bcf189bec9798980e8252"><td class="mdescLeft">&#160;</td><td class="mdescRight">Specifies a maximum limit on the number of worker threads enabled in this framework.  <a href="#af3932db00a7bcf189bec9798980e8252">More...</a><br/></td></tr>
<tr class="separator:af3932db00a7bcf189bec9798980e8252"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:ad7bd43e200620c216338340db1477d0a"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTheron_1_1Framework_ad7bd43e200620c216338340db1477d0a.html#ad7bd43e200620c216338340db1477d0a">SetMinThreads</a> (const <a class="el" href="namespaceTheron_a254da7d1d07833b997828500fbf73daa.html#a254da7d1d07833b997828500fbf73daa">uint32_t</a> count)</td></tr>
<tr class="memdesc:ad7bd43e200620c216338340db1477d0a"><td class="mdescLeft">&#160;</td><td class="mdescRight">Specifies a minimum limit on the number of worker threads enabled in this framework.  <a href="#ad7bd43e200620c216338340db1477d0a">More...</a><br/></td></tr>
<tr class="separator:ad7bd43e200620c216338340db1477d0a"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a7d1eec252eaf09d35787d7ff42bb4f92"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceTheron_a254da7d1d07833b997828500fbf73daa.html#a254da7d1d07833b997828500fbf73daa">uint32_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTheron_1_1Framework_a7d1eec252eaf09d35787d7ff42bb4f92.html#a7d1eec252eaf09d35787d7ff42bb4f92">GetMaxThreads</a> () const </td></tr>
<tr class="memdesc:a7d1eec252eaf09d35787d7ff42bb4f92"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the current maximum limit on the number of worker threads in this framework.  <a href="#a7d1eec252eaf09d35787d7ff42bb4f92">More...</a><br/></td></tr>
<tr class="separator:a7d1eec252eaf09d35787d7ff42bb4f92"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a90fe333c11791e419b3eeaeb332c5514"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceTheron_a254da7d1d07833b997828500fbf73daa.html#a254da7d1d07833b997828500fbf73daa">uint32_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTheron_1_1Framework_a90fe333c11791e419b3eeaeb332c5514.html#a90fe333c11791e419b3eeaeb332c5514">GetMinThreads</a> () const </td></tr>
<tr class="memdesc:a90fe333c11791e419b3eeaeb332c5514"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the current minimum limit on the number of worker threads in this framework.  <a href="#a90fe333c11791e419b3eeaeb332c5514">More...</a><br/></td></tr>
<tr class="separator:a90fe333c11791e419b3eeaeb332c5514"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a40159b92cc679a38d2f0cf45cdbdc7be"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceTheron_a254da7d1d07833b997828500fbf73daa.html#a254da7d1d07833b997828500fbf73daa">uint32_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTheron_1_1Framework_a40159b92cc679a38d2f0cf45cdbdc7be.html#a40159b92cc679a38d2f0cf45cdbdc7be">GetNumThreads</a> () const </td></tr>
<tr class="memdesc:a40159b92cc679a38d2f0cf45cdbdc7be"><td class="mdescLeft">&#160;</td><td class="mdescRight">Gets the actual number of worker threads currently in this framework.  <a href="#a40159b92cc679a38d2f0cf45cdbdc7be">More...</a><br/></td></tr>
<tr class="separator:a40159b92cc679a38d2f0cf45cdbdc7be"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a15b2632e9004c3a7caa04e8d395fac3c"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceTheron_a254da7d1d07833b997828500fbf73daa.html#a254da7d1d07833b997828500fbf73daa">uint32_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTheron_1_1Framework_a15b2632e9004c3a7caa04e8d395fac3c.html#a15b2632e9004c3a7caa04e8d395fac3c">GetPeakThreads</a> () const </td></tr>
<tr class="memdesc:a15b2632e9004c3a7caa04e8d395fac3c"><td class="mdescLeft">&#160;</td><td class="mdescRight">Gets the peak number of worker threads ever active in the framework.  <a href="#a15b2632e9004c3a7caa04e8d395fac3c">More...</a><br/></td></tr>
<tr class="separator:a15b2632e9004c3a7caa04e8d395fac3c"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0bbe8b5b6ffdea2a8dc0577d371e75e6"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceTheron_a254da7d1d07833b997828500fbf73daa.html#a254da7d1d07833b997828500fbf73daa">uint32_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTheron_1_1Framework_a0bbe8b5b6ffdea2a8dc0577d371e75e6.html#a0bbe8b5b6ffdea2a8dc0577d371e75e6">GetNumCounters</a> () const </td></tr>
<tr class="memdesc:a0bbe8b5b6ffdea2a8dc0577d371e75e6"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the number of counters available for querying via GetCounterValue.  <a href="#a0bbe8b5b6ffdea2a8dc0577d371e75e6">More...</a><br/></td></tr>
<tr class="separator:a0bbe8b5b6ffdea2a8dc0577d371e75e6"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a722e6d5081d82de68d0a8f15a78e4aa4"><td class="memItemLeft" align="right" valign="top">const char *&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTheron_1_1Framework_a722e6d5081d82de68d0a8f15a78e4aa4.html#a722e6d5081d82de68d0a8f15a78e4aa4">GetCounterName</a> (const <a class="el" href="namespaceTheron_a254da7d1d07833b997828500fbf73daa.html#a254da7d1d07833b997828500fbf73daa">uint32_t</a> counter) const </td></tr>
<tr class="memdesc:a722e6d5081d82de68d0a8f15a78e4aa4"><td class="mdescLeft">&#160;</td><td class="mdescRight">Returns the string name of the counter with the given index.  <a href="#a722e6d5081d82de68d0a8f15a78e4aa4">More...</a><br/></td></tr>
<tr class="separator:a722e6d5081d82de68d0a8f15a78e4aa4"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a071ed6177b2455401e8b24c84c11bb86"><td class="memItemLeft" align="right" valign="top">void&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTheron_1_1Framework_a071ed6177b2455401e8b24c84c11bb86.html#a071ed6177b2455401e8b24c84c11bb86">ResetCounters</a> ()</td></tr>
<tr class="memdesc:a071ed6177b2455401e8b24c84c11bb86"><td class="mdescLeft">&#160;</td><td class="mdescRight">Resets all internal event counters for this framework.  <a href="#a071ed6177b2455401e8b24c84c11bb86">More...</a><br/></td></tr>
<tr class="separator:a071ed6177b2455401e8b24c84c11bb86"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a0ee4917d4e5c680996e4f15f0858f181"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceTheron_a254da7d1d07833b997828500fbf73daa.html#a254da7d1d07833b997828500fbf73daa">uint32_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTheron_1_1Framework_a0ee4917d4e5c680996e4f15f0858f181.html#a0ee4917d4e5c680996e4f15f0858f181">GetCounterValue</a> (const <a class="el" href="namespaceTheron_a254da7d1d07833b997828500fbf73daa.html#a254da7d1d07833b997828500fbf73daa">uint32_t</a> counter) const </td></tr>
<tr class="memdesc:a0ee4917d4e5c680996e4f15f0858f181"><td class="mdescLeft">&#160;</td><td class="mdescRight">Gets the current value of a specified event counter.  <a href="#a0ee4917d4e5c680996e4f15f0858f181">More...</a><br/></td></tr>
<tr class="separator:a0ee4917d4e5c680996e4f15f0858f181"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a6d5fe8944ea6dc6a9b806b8c86e77997"><td class="memItemLeft" align="right" valign="top"><a class="el" href="namespaceTheron_a254da7d1d07833b997828500fbf73daa.html#a254da7d1d07833b997828500fbf73daa">uint32_t</a>&#160;</td><td class="memItemRight" valign="bottom"><a class="el" href="classTheron_1_1Framework_a6d5fe8944ea6dc6a9b806b8c86e77997.html#a6d5fe8944ea6dc6a9b806b8c86e77997">GetPerThreadCounterValues</a> (const <a class="el" href="namespaceTheron_a254da7d1d07833b997828500fbf73daa.html#a254da7d1d07833b997828500fbf73daa">uint32_t</a> counter, <a class="el" href="namespaceTheron_a254da7d1d07833b997828500fbf73daa.html#a254da7d1d07833b997828500fbf73daa">uint32_t</a> *const perThreadCounts, const <a class="el" href="namespaceTheron_a254da7d1d07833b997828500fbf73daa.html#a254da7d1d07833b997828500fbf73daa">uint32_t</a> maxCounts) const </td></tr>
<tr class="memdesc:a6d5fe8944ea6dc6a9b806b8c86e77997"><td class="mdescLeft">&#160;</td><td class="mdescRight">Gets the current per-thread values of a specified event counter.  <a href="#a6d5fe8944ea6dc6a9b806b8c86e77997">More...</a><br/></td></tr>
<tr class="separator:a6d5fe8944ea6dc6a9b806b8c86e77997"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a43f84e854ced9bc9df593ffcd61d2ffd"><td class="memTemplParams" colspan="2">template&lt;typename ObjectType &gt; </td></tr>
<tr class="memitem:a43f84e854ced9bc9df593ffcd61d2ffd"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classTheron_1_1Framework_a43f84e854ced9bc9df593ffcd61d2ffd.html#a43f84e854ced9bc9df593ffcd61d2ffd">SetFallbackHandler</a> (ObjectType *const actor, void(ObjectType::*handler)(const <a class="el" href="classTheron_1_1Address.html">Address</a> from))</td></tr>
<tr class="memdesc:a43f84e854ced9bc9df593ffcd61d2ffd"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets the fallback message handler executed for unhandled messages.  <a href="#a43f84e854ced9bc9df593ffcd61d2ffd">More...</a><br/></td></tr>
<tr class="separator:a43f84e854ced9bc9df593ffcd61d2ffd"><td class="memSeparator" colspan="2">&#160;</td></tr>
<tr class="memitem:a1b85e4455eb0d9f7e2e9a5163a14e119"><td class="memTemplParams" colspan="2">template&lt;typename ObjectType &gt; </td></tr>
<tr class="memitem:a1b85e4455eb0d9f7e2e9a5163a14e119"><td class="memTemplItemLeft" align="right" valign="top">bool&#160;</td><td class="memTemplItemRight" valign="bottom"><a class="el" href="classTheron_1_1Framework_a1b85e4455eb0d9f7e2e9a5163a14e119.html#a1b85e4455eb0d9f7e2e9a5163a14e119">SetFallbackHandler</a> (ObjectType *const actor, void(ObjectType::*handler)(const void *const data, const <a class="el" href="namespaceTheron_a254da7d1d07833b997828500fbf73daa.html#a254da7d1d07833b997828500fbf73daa">uint32_t</a> size, const <a class="el" href="classTheron_1_1Address.html">Address</a> from))</td></tr>
<tr class="memdesc:a1b85e4455eb0d9f7e2e9a5163a14e119"><td class="mdescLeft">&#160;</td><td class="mdescRight">Sets the fallback message handler executed for unhandled messages.  <a href="#a1b85e4455eb0d9f7e2e9a5163a14e119">More...</a><br/></td></tr>
<tr class="separator:a1b85e4455eb0d9f7e2e9a5163a14e119"><td class="memSeparator" colspan="2">&#160;</td></tr>
</table>
<a name="details" id="details"></a><h2 class="groupheader">Detailed Description</h2>
<div class="textblock"><p>Manager class that hosts, manages, and executes actors. </p>
<p>Users should construct an instance of the <a class="el" href="classTheron_1_1Framework.html" title="Manager class that hosts, manages, and executes actors. ">Framework</a> in non-actor application code before creating any actors. <a class="el" href="classTheron_1_1Actor.html" title="The actor baseclass. ">Actor</a> objects can then be created by passing the framework as a parameter to the constructor of the derived actor class:</p>
<div class="fragment"><div class="line"><span class="keyword">class </span>MyActor : <span class="keyword">public</span> <a class="code" href="classTheron_1_1Actor.html">Theron::Actor</a></div>
<div class="line">{</div>
<div class="line"><span class="keyword">public</span>:</div>
<div class="line"></div>
<div class="line">    <span class="keyword">explicit</span> MyActor(<a class="code" href="classTheron_1_1Framework.html">Theron::Framework</a> &amp;framework) : Theron::<a class="code" href="classTheron_1_1Framework_ae4af50bf1743d112cb2c2c784bea21c8.html#ae4af50bf1743d112cb2c2c784bea21c8">Actor</a>(framework)</div>
<div class="line">    {</div>
<div class="line">    }</div>
<div class="line">};</div>
<div class="line"></div>
<div class="line"><a class="code" href="classTheron_1_1Framework.html">Theron::Framework</a> framework;</div>
<div class="line">MyActor myActor(framework);</div>
</div><!-- fragment --><p>Internally, each framework contains a pool of worker threads which are used to execute the message handlers of the actors created within it. The threads within a framework are dedicated to executing actors within that framework, and are never used to execute actors in other frameworks or any other user code.</p>
<p>The initial number of worker threads can be specified on construction of the framework by means of an explicit parameter to the <a class="el" href="classTheron_1_1Framework_aa1571bd9eb157559b2c8ad1af0c4af8b.html#aa1571bd9eb157559b2c8ad1af0c4af8b" title="Constructor. ">Framework::Framework</a> constructor. Additionally, the number of threads can be increased or decreased at runtime by calling <a class="el" href="classTheron_1_1Framework_ad7bd43e200620c216338340db1477d0a.html#ad7bd43e200620c216338340db1477d0a">SetMinThreads</a> or <a class="el" href="classTheron_1_1Framework_af3932db00a7bcf189bec9798980e8252.html#af3932db00a7bcf189bec9798980e8252">SetMaxThreads</a>. The utilization of the currently enabled threads is measured by performance metrics which can be queried with <a class="el" href="classTheron_1_1Framework_a0ee4917d4e5c680996e4f15f0858f181.html#a0ee4917d4e5c680996e4f15f0858f181">GetCounterValue</a>.</p>
<p>The worker threads are created and synchronized using underlying threading objects. Different implementations of these threading objects are possible, allowing <a class="el" href="namespaceTheron.html" title="Main namespace containing all public API components. ">Theron</a> to be used in environments with different threading primitives. Currently, implementations based on Win32 threads, Boost threads, std::thread and POSIX threads are provided. Users can define <a class="el" href="Defines_8h_a0b9efe056acea27a0164457d09896e2d.html#a0b9efe056acea27a0164457d09896e2d">THERON_BOOST</a> or <a class="el" href="Defines_8h_ad0b3f3df7cc52c8950a1bf908001bb78.html#ad0b3f3df7cc52c8950a1bf908001bb78">THERON_CPP11</a> to enable or disable the use of boost::thread and std::thread, respectively.</p>
<p>It's possible to construct multiple <a class="el" href="classTheron_1_1Framework.html" title="Manager class that hosts, manages, and executes actors. ">Framework</a> objects within a single application. The actors created within each <a class="el" href="classTheron_1_1Framework.html" title="Manager class that hosts, manages, and executes actors. ">Framework</a> are processed by separate pools of worker threads. <a class="el" href="classTheron_1_1Actor.html" title="The actor baseclass. ">Actor</a> addresses are globally unique across all frameworks. Actors in one framework can send messages to actors in other frameworks.</p>
<p>Actors created within each <a class="el" href="classTheron_1_1Framework.html" title="Manager class that hosts, manages, and executes actors. ">Framework</a> are executed only by the worker threads in the threadpool of that framework, allowing the threads of a <a class="el" href="classTheron_1_1Framework.html" title="Manager class that hosts, manages, and executes actors. ">Framework</a> to be effectively dedicated to particular actors. See <a class="el" href="structTheron_1_1Framework_1_1Parameters.html">Theron::Framework::Parameters</a> for more information.</p>
<dl class="section note"><dt>Note</dt><dd>An important point about <a class="el" href="classTheron_1_1Framework.html" title="Manager class that hosts, manages, and executes actors. ">Framework</a> objects is that they must always outlive the actors created within them. </dd></dl>
</div></div><!-- contents -->
<!-- start footer part -->
<hr class="footer"/><address class="footer"><small>
Generated by &#160;<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/>
</a> 1.8.5
</small></address>
</body>
</html>
